iOSアプリ開発で関数型プログラミングを実現するThe Composable Architectureの紹介
https://fortee.jp/2025fp-matsuri/proposal/71fbd521-9dc5-458d-89f6-cbff8e84e3cc
https://speakerdeck.com/yimajo/iosapurikai-fa-de-guan-shu-xing-puroguraminguwoshi-xian-suru-the-composable-architecturenoshao-jie-792bb7b5-817f-4e25-adab-b071a9b94e5a
FP はコードの 再利用性 を高め、コードを高品質な部品として再利用可能としれる手段を提供するもの
iOS 開発は外部依存まみれ
そのリスクを軽減するには、自身のコードの振る舞いは予測可能なものとし、自動検証ができるようにし、そのような 信頼性 の高い部品を組み合わせて構築したい
そのための第一歩として副作用の分離がある
TCA を用いると副作用を分離することができる
TCA のサンプル: https://github.com/github/CopilotForXcode
View は State と Action の Reducer として定義する
TCA のメリット
純粋なロジックを副作用と分離できる: 可読性 の向上
Effect.run で副作用を分離すると、Swift Concurrency で動作する
優先順位の設定、並列実行の構造化処理
キャンセル処理が用意されている
関心の分離 ができるため、テスト も行いやすい
https://gyazo.com/be57f18599ded8e652a28f64e24c7bac
永続化を端に追いやる を実現できる
Reducer は 高階関数 であり DI が可能であるため、レイヤードアーキテクチャ を導入する必要はない
モジュール分割で十分
https://gyazo.com/d7cd54e34543fe4719d8211b62a5a2df
関数合成 も可能
warning.icon Reducer は 純粋関数型 ではない
(inout State, Action) -> Effect<Action>
inout State はミュータブル
State を変更するのではなく、メインスレッド の Reducer 自身が State を変更する
∵ パフォーマンス 上の懸念
#関数型まつり_2025